<%@page language="java"%>
<%
String desde=(String)request.getParameter("desde");
String hasta=(String)request.getParameter("hasta");

if(desde==null)
	desde="";
if(hasta==null)
	hasta="";

%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">

<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">

<title>GPSou</title>
<style type="text/css">
    v\:* {
      behavior:url(#default#VML);
    }
</style>

<style type="text/css">
    .on {color:red}
    .off {color:black}
    a {color: black}
</style>

<!-- <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAANdXnaDQ5-BE42sETh1OnBxSeFQxS9BfaeYOTB7YDKkufq6biNhTq2kD2XSUxkrEVwfrdBqRf00sWlg" type="text/javascript" charset="utf-8"></script> -->
<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAANdXnaDQ5-BE42sETh1OnBxQSUI96VjuXJJ7uIyuEjKZOYLINbRQ00Oj1snry5mEp_2LhV3da9mA0JQ" type="text/javascript" charset="utf-8"></script>

<script type="text/javascript">
//<![CDATA[

var http_request = false;

var map;
var gMarker;
var points = [];
var ruta;
var datos;

function load() {
    if (GBrowserIsCompatible()) {

	var url="/GoogleGPS/ServletGoogleGPS?p=getRuta&desde=<%=desde%>&hasta=<%=hasta%>";

	map = new GMap2(document.getElementById("map"));
        document.getElementById("espera").style.display="block";
        document.getElementById("map").style.display="none";
        document.getElementById("links").style.display="none";

	map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());
        map.setCenter(new GLatLng(0, 0), 13);
	map.setMapType(G_HYBRID_MAP);

        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');
            }
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
                 } catch (e) {}
            }
        }

        if (!http_request) {
            alert('Giving up :( Cannot create an XMLHTTP instance');
            return false;
        }
        http_request.onreadystatechange = alertContents;
        http_request.open('GET', url, true);
        http_request.send(null);

    }
}

function alertContents() {
    if (http_request.readyState == 4) {
        if (http_request.status == 200) {

            datos=http_request.responseText;
    	    ruta=datos.split("#");

	    if(ruta.length<=1) {
	    	alert("No hay datos de recorrido en el intervalo de tiempo seleccionado");
		history.back(1);
	    } else {

            	document.getElementById("espera").style.display="none";
            	document.getElementById("map").style.display="block";
            	document.getElementById("links").style.display="block";

            	dibuja();
	    }
        } else {
            alert('Se ha producido un error al obtener la ruta.');
	    history.back(1);
        }
    }
}

function googleEncode(lat, lon) {
	var result="";
	var c;
	lat=Math.round(lat * 100000);
	lon=Math.round(lon * 100000);
	lat = lat << 1;
	lon = lon << 1;
	
	if(lat < 0) {
		lat=~lat;
	}

	if(lon < 0) {
		lon=~lon;
	}

	do {
		c=lat & 0x1F;
		lat = lat >> 5;
		if(lat > 0)
			c = c | 0x20;
		result+=String.fromCharCode(c+63);
	}	while(lat > 0);
	

	do {
		c=lon & 0x1F;
		lon = lon >> 5;
		if(lon > 0)
			c = c | 0x20;
		result+=String.fromCharCode(c+63);
	}	while(lon > 0);
	

	return(result);
}

function dibuja() {

    try {
      var point;
      var latitud, longitud, latitudNMEA, longitudNMEA;
      var grados;
      var latitudAnterior, longitudAnterior;
      var dx, dy;
      var distancia=0;
      var perfil="";
      var encodedRuta;
      var levels="";

      results=ruta[1].split(";");
      latitudNMEA=results[1];
      longitudNMEA=results[2];
      grados=Math.floor(latitudNMEA/1000000);
      if(grados<0)
	grados=grados+1;
      latitudAnterior=(latitudNMEA/1000000-grados)/0.6+grados;
      grados=Math.floor(longitudNMEA/1000000);
      if(grados<0)
	grados=grados+1;
      longitudAnterior=(longitudNMEA/1000000-grados)/0.6+grados;
      encodedRuta=googleEncode(latitudAnterior, longitudAnterior);

      for(i=1; i<ruta.length; i++) {
        results=ruta[i].split(";");

        latitudNMEA=results[1];
        longitudNMEA=results[2];

        perfil+="#"+results[5];

        grados=Math.floor(latitudNMEA/1000000);
        if(grados<0)
	  grados=grados+1;
        latitud=(latitudNMEA/1000000-grados)/0.6+grados;
        grados=Math.floor(longitudNMEA/1000000);
        if(grados<0)
	  grados=grados+1;
        longitud=(longitudNMEA/1000000-grados)/0.6+grados;

        dx=6370*(latitud-latitudAnterior)*Math.PI/180;
        dy=6370*Math.cos(latitud*Math.PI/180)*(longitud-longitudAnterior)*Math.PI/180;
        distancia+=Math.sqrt(Math.pow(dx,2)+Math.pow(dy,2));
        encodedRuta+=googleEncode(latitud - latitudAnterior, longitud - longitudAnterior);
	levels+="B";

        latitudAnterior=latitud;
        longitudAnterior=longitud;

        point = new GLatLng(latitud, longitud);
        points.push(point);
      }

      encodedRuta=encodedRuta.replace("\\/g", "\\\\");

      document.getElementById("label").innerHTML="Distancia total: <b>"+Math.round(distancia*1000)/1000+" km<\/b>";
      document.datos.datosPerfil.value=perfil;

      gMarker=new GMarker(point, null);
      map.addOverlay(gMarker);

      map.panTo(new GLatLng(latitud, longitud));

      var gPolyline=new GPolyline(points);
      var encodedPolyline = new GPolyline.fromEncoded({
    	color: "#FF0000",
    	weight: 10,
    	points: encodedRuta,
    	levels: levels,
    	zoomFactor: 32,
    	numLevels: 4
      });
      map.addOverlay(encodedPolyline);

    } catch (err) {alert(err.description);}

}

function mostrarPerfil() {
    if (document.all)
        var xMax = screen.width, yMax = screen.height;
    else
        if (document.layers)
            var xMax = window.outerWidth, yMax = window.outerHeight;
        else
            var xMax = 640, yMax=480;

    var xOffset = (xMax - 575)/2, yOffset = (yMax - 400)/2;

    window.open('/GoogleGPS/html/perfil.html', 'Perfil', 'location=no,width=575,height=400,menubar=no,applications=no,scrollbars=no,screenX='+xOffset+',screenY='+yOffset+',top='+yOffset+',left='+xOffset+'');
    return false;
}
//]]>
</script>

</head>

<body onload="load()" onunload="GUnload()">
  <p style="text-align: center"><img src="/GoogleGPS/html/images/GPSou-logo-banner.png" alt="GPSou"></p>
  <div style="text-align: center">
  <div id="espera">

    <h3 style="color: red">ESPERA UN MOMENTO, POR FAVOR...</h3>

  </div>

  <div id="map" style="width: 500px; height: 300px; margin-left: auto; margin-right: auto"></div>

  <div id="links" style="display: none">
    <label id="label"> </label>
    <br>
    <button name="perfilBtn" onClick="mostrarPerfil();">Ver perfil</button>
    <br>
    <br>
     <a href="/GoogleGPS/ServletGoogleGPS?p=guardarGoogle&amp;desde=<%=desde%>&amp;hasta=<%=hasta%>">Guardar en local</a> | <a href="/GoogleGPS/ServletGoogleGPS?p=exportEarth&amp;desde=<%=desde%>&amp;hasta=<%=hasta%>">Exportar a Google Earth</a> | <a href="/GoogleGPS/ServletGoogleGPS?p=exportOzi&amp;desde=<%=desde%>&amp;hasta=<%=hasta%>">Exportar a OziExplorer</a> | <a href="Principal.jsp">Volver</a> | <a href="/GoogleGPS/ServletGoogleGPS?p=desconectar">Salir</a>
  <p>
    <img src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Strict" height="31" width="88">
  </p>
  </div>

<form name="datos" action="null">
<p>
<input type="hidden" name="datosPerfil" value="hola">
</p>
</form>
</div>
</body>

</html>


